package com.shadow.demo.dictionary.controller;

import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

@Tag(name = "组件-数据字典-模型")
@RestController
@RequestMapping("dicModel")
public class DicModelController {

//    @Resource
//    DicItemService dicModelService;
//    @Resource
//    private DicService dicService;
//    @Resource
//    private DicCacheService dicCacheService;
//
//    @Operation(summary = "导出数据字典")
//    @GetMapping("export")
//    public void exportDic(
//            @Parameter(name = "dicIds", description = "字典Id", required = true)
//            @RequestParam(value = "dicIds", required = true) String[] dicIds,
//            @Parameter(name = "fileName", description = "文件名称", required = false)
//            @RequestParam(value = "fileName", required = false) String fileName,
//            HttpServletResponse response
//    ) {
//        // 创建文件
//        File file = dicService.exportDic(dicIds);
//        String time = DateUtil.format(new Date(), "HH.mm");
//        String name = "数据字典" + time + ".json";
//        if (dicIds.length == 1) {
//            for (String dicId : dicIds) {
//                DicDTO dicDetail = dicService.getDicById(dicId);
//                name = dicDetail.getName() + ".json";
//            }
//        }
//        if (fileName != null) {
//            name = fileName;
//        }
//        OutputStream os = null;
//        try {
//            // 数据写入文件
//            response.setCharacterEncoding(StandardCharsets.UTF_8.name());
//            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(name, StandardCharsets.UTF_8.name()));
//            os = response.getOutputStream();
//            IoUtil.write(file, os);
//        } catch (IOException e) {
//            throw new RuntimeException();
//        } finally {
//            IoUtil.closeQuietly(os);
//            IoUtil.deleteQuietly(file);
//        }
//    }
//
//    @Operation(summary = "导入JSON文件添加到数据字典")
//    @PostMapping("importFiles")
//    public R importFiles(
//            @Parameter(description = "文件", required = true)
//            @RequestParam("file") MultipartFile file) {
//        List<String> msgList = dicModelService.importDicFiles(file);
//        if (msgList.size() == 0) {
//            return R.success("添加成功");
//        } else {
//            StringBuilder indexMsg = new StringBuilder();
//            StringBuilder nameMsg = new StringBuilder();
//            for (int index = 1; index <= msgList.size(); index++) {
//                if (index < msgList.size()) {
//                    indexMsg.append(index).append("、");
//                    nameMsg.append(msgList.get(index - 1)).append("、");
//                } else {
//                    indexMsg.append(index);
//                    nameMsg.append(msgList.get(index - 1));
//                }
//            }
//            return R.fail("第" + indexMsg + "项导入失败：名称" + nameMsg + "已存在");
//        }
//    }
//
//    @Operation(summary = "导入JSON文件添加到数据字典")
//    @PostMapping(value = "importFilesNew", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
//    public R importFilesNew(
//            @Parameter(description = "上传文件", required = true)
//            @RequestPart(value = "file") MultipartFile file) {
//        List<DicDTO> dicList = dicModelService.parseDicFileNew(file);
//
//        if (CollectionUtils.isEmpty(dicList)) {
//            return R.fail("待导入数据为空");
//        }
//        try {
//            dicModelService.importDicFilesNew(dicList);
//            return R.success("导入成功");
//        } catch (Exception ex) {
//            return R.fail(ex.getMessage());
//        }
//    }
//
//    @Operation(summary = "导入数据字典文件")
//    @PostMapping(value = "importByFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
//    public R importByFiles(@Parameter(name = "dicId", description = "字典Id", required = true)
//                                @RequestParam(value = "dicId", required = true) String dicId,
//                                @Parameter(description = "上传文件", required = true)
//                                @RequestPart(value = "file") MultipartFile file
//    ) {
//        List<DicItemDTO> list = dicModelService.parseDicFile(file);
//        if (CollectionUtils.isEmpty(list)) {
//            return R.fail("待导入数据为空");
//        }
//        try {
//            dicModelService.importDicFileByDicId(dicId, list);
//            return R.success("添加成功");
//        } catch (Exception ex) {
//            return R.fail(ex.getMessage());
//        }
//    }
//
//
//    @Operation(summary = "导出数据字典文件")
//    @GetMapping(value = "exportByFiles")
//    public void exportByFiles(@Parameter(name = "dicId", description = "字典Id", required = true)
//                              @RequestParam(value = "dicId", required = true) String dicId,
//                              @Parameter(name = "contentType", required = false)
//                              @RequestParam(value = "contentType", required = false) String contentType,
//                              HttpServletResponse response
//    ) {
//        DicEntity dic = dicService.getById(dicId);
//        if (dic == null) {
//            throw new RuntimeException(String.format("未找到【%s】对应的字典", dicId));
//        }
//        List<DicItemDTO> list = dicService.treeDicItemByDicId(dicId, null);
//        String respCode = JSON.toJSONString(list);
//        StringBuilder fileName = new StringBuilder();
//        fileName.append(dic.getName());
//        fileName.append(".json");
//        File file = PathUtil.createTmpFile(fileName.toString());
//        IoUtil.writeText(respCode, file);
//        OutputStream os = null;
//        try {
//            // 数据写入文件
//            response.setCharacterEncoding(StandardCharsets.UTF_8.name());
//            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName.toString(), StandardCharsets.UTF_8.name()));
//            os = response.getOutputStream();
//            IoUtil.write(file, os);
//        } catch (IOException e) {
//            throw new RuntimeException();
//        } finally {
//            IoUtil.closeQuietly(os);
//            IoUtil.deleteQuietly(file);
//        }
//    }
//
//    @Operation(summary = "根据字典Id获取字典定义")
//    @GetMapping("getDicById")
//    public DicEntity getDicById(
//            @Parameter(name = "dicId", description = "字典Id", required = true)
//            @RequestParam(value = "dicId", required = true) String dicId) {
//        return dicService.getById(dicId);
//    }
//
//    @Operation(summary = "根据字典名称获取字典定义")
//    @GetMapping("getDicByName")
//    public DicEntity getDicByName(
//            @Parameter(name = "dicName", description = "字典名称", required = true)
//            @RequestParam(value = "dicName", required = true) String dicName) {
//        return dicModelService.getDicByName(dicName);
//    }
//
//    @Operation(summary = "保存字典定义")
//    @PostMapping("saveDic")
//    public DicEntity saveDic(
//            @Parameter(description = "字典实体", required = true)
//            @RequestBody DicEntity dic) {
//        dic = dicModelService.saveDic(dic);
//        return dic;
//    }
//
//    @Operation(summary = "根据字典Id删除字典定义")
//    @PostMapping("removeDicByIds")
//    public R removeDicByIds(
//            @Parameter(description = "字典Id数组", required = true)
//            @RequestParam(value = "dicIds", required = true) String[] dicIds) {
//        dicModelService.removeDicByIds(dicIds);
//        return R.success("删除成功");
//    }
//
//    @Operation(summary = "清除数据字典缓存")
//    @GetMapping("clearDicCache")
//    public R clearDicCache(){
//        dicCacheService.clearDicCache();
//        return R.success();
//    }
//
//    @Operation(summary = "搜索字典")
//    @PostMapping("searchDic")
//    public QueryResult<DicEntity> searchDic(@RequestBody QueryFilter filter) {
//        QueryResult<DicEntity> qr = dicModelService.searchDic(filter);
//        return qr;
//    }
//
//    @Operation(summary = "根据字典项Id获取字典项定义")
//    @GetMapping("getDicItemById")
//    public DicItemEntity getDicItemById(
//            @Parameter(name = "dicItemId", description = "字典项Id", required = true)
//            @RequestParam(value = "dicItemId", required = true) String dicItemId) {
//        DicItemEntity dicItem = dicModelService.getById(dicItemId);
//        return dicItem;
//    }
//
//    @Operation(summary = "保存字典项")
//    @PostMapping("saveDicItem")
//    public DicItemEntity saveDicItem(
//            @Parameter(description = "字典项实体", required = true)
//            @RequestBody DicItemEntity dicItem) {
//        dicItem = dicModelService.saveDicItem(dicItem);
//        return dicItem;
//    }
//
//    @Operation(summary = "根据字典Id删除字典项")
//    @PostMapping("removeDicItemByDicId")
//    public R removeDicItemByDicId(
//            @Parameter(description = "字典Id", required = true)
//            @RequestParam(value = "dicId", required = true) String dicId) {
//        dicModelService.removeDicItemByDicIds(dicId);
//        return R.success("删除成功");
//    }
//
//    @Operation(summary = "根据字典项Id删除字典项")
//    @PostMapping("removeDicItemByIds")
//    public R removeDicItemByIds(
//            @Parameter(description = "字典项Id数组", required = true)
//            @RequestParam(value = "dicItemIds", required = true) String[] dicItemIds) {
//        if (dicItemIds == null || dicItemIds.length < 1) {
//            return R.fail("删除项不能为空");
//        }
//        List<String> dicIds = dicModelService.getDicIdByDicItemIds(dicItemIds);
//        dicModelService.removeDicItemByIds(dicItemIds);
//        for (String dicId : dicIds){
//            dicCacheService.removeDicCacheById(dicId);
//        }
//        return R.success("删除成功");
//    }
//
//    @Operation(summary = "根据字典Id获取字典项列表")
//    @GetMapping("listSubDicItem")
//    public List<DicItemEntity> listSubDicItem(
//            @Parameter(name = "dicId", description = "字典Id", required = true)
//            @RequestParam(value = "dicId", required = true) String dicId,
//            @Parameter(name = "parentId", description = "父节点Id", required = false)
//            @RequestParam(value = "parentId", required = false) String parentId) {
//        if (parentId == null) {
//            parentId = dicId;
//        }
//        return dicModelService.listSubDicItem(dicId, parentId);
//    }
}
